package com.chen.listener;

import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

/*
 *  监听应用的域的创建和销毁
 *  应用域在程序启动的时候创建，在程序结束的时候销毁
 *
 * */
@WebListener
public class MyApplicationListener implements ServletContextListener, ServletContextAttributeListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {

        System.out.println(sce.getServletContext().hashCode() + "应用域创建了");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println(sce.getServletContext().hashCode() + "应用域销毁了");
    }

    @Override
    // 当向应用域中添加数据的执行
    public void attributeAdded(ServletContextAttributeEvent scae) {
        // 新添加的数据在 ServletContextAttributeEvent 对象中封装
        System.out.println(scae.getServletContext() + " 应用域 " + scae.getName() + "被添加进入应用域 值为：" + scae.getValue());
    }

    @Override
    // 当应用域中数据被删除执行
    public void attributeRemoved(ServletContextAttributeEvent scae) {
        System.out.println(scae.getServletContext() + " 应用域 " + scae.getName() + "被删除出应用域 值为：" + scae.getValue());

    }

    @Override
    // 当应用域中数据被替换执行
    public void attributeReplaced(ServletContextAttributeEvent scae) {
        System.out.println(scae.getServletContext() + " 应用域 " + scae.getName() + "被修改进行进入应用域 值为：" + scae.getValue() + "修改为" + scae.getServletContext().getAttribute(scae.getName()));

    }
}
